DEFINITION FOR AMIGALIB MODULE StdIO ;

FROM SYSTEM IMPORT ADDRESS, STRING, LONGSET, BADDRESS ;

(* The following datatypes and constant declarations are DICE specific *)
TYPE
  FILEPtr = POINTER TO FILE ;
  FILE = RECORD
    sd_Next   : ADDRESS ;
    sd_Prev   : ADDRESS ;
    sd_RBuf   : ADDRESS ;
    sd_RPtr   : ADDRESS ;
    sd_WBuf   : ADDRESS ;
    sd_WPtr   : ADDRESS ;
    sd_BufSiz : LONGINT ;
    sd_RLeft  : LONGINT ;
    sd_WLeft  : LONGINT ;
    sd_Flags  : LONGSET ;
    sd_Error  : LONGINT ;
    sd_Offset : LONGINT ;
    sd_Fd     : LONGINT ;
    sd_UC     : INTEGER ;
    sd_Name   : STRING  ;
  END ;

CONST
  _IOFBF	=      -1 ;
  _IOLBF	=  00010H ;
  _IONBF	= 	0 ;

  BUFSIZ	= 1024 ;
  EOF		=   -1 ;
  FILENAME_MAX	= 1024 ;
  FOPEN_MAX	=   20 ;
  L_tmpnam	=   32 ;
  SEEK_SET 	=    0 ;
  SEEK_CUR	=    1 ;
  SEEK_END	=    2 ;
  TMP_MAX 	= 4096 ;

VAR
  stdin	 : FILEPtr ;
  stdout : FILEPtr ;
  stderr : FILEPtr ;

PROCEDURE clearerr( fi : FILEPtr ) ;
PROCEDURE feof( fi : FILEPtr ) : BOOLEAN ;
PROCEDURE ferror( fi : FILEPtr ) : BOOLEAN ;
PROCEDURE fileno( fi : FILEPtr ) : LONGINT ;

PROCEDURE perror( s : STRING ) ;

PROCEDURE fclose ( f : FILEPtr ) : LONGINT ;
PROCEDURE fflush ( f : FILEPtr ) : LONGINT ;
PROCEDURE fopen  ( filename, mode : STRING ) : FILEPtr ;
PROCEDURE freopen( filename, mode : STRING ; f : FILEPtr ) : FILEPtr ;
PROCEDURE setbuf ( f : FILEPtr ; buff: ADDRESS ) ;
PROCEDURE setvbuf( f : FILEPtr ; buff: ADDRESS ; mode,size: LONGINT ) : LONGINT;

PROCEDURE remove( fn : STRING ) : LONGINT ;
PROCEDURE rename( old , new : STRING ) : LONGINT ;
PROCEDURE tmpfile( ) : FILEPtr ;
PROCEDURE tmpnam( str : STRING ) : STRING ;

PROCEDURE fgetpos( f : FILEPtr ; VAR fpos_t : LONGINT ) : LONGINT ;
PROCEDURE fseek( f : FILEPtr ; offset : LONGINT ; origin : LONGINT ) : LONGINT ;
PROCEDURE fsetpos( f : FILEPtr ; pos : LONGINT ) : LONGINT ;

PROCEDURE ftell( f : FILEPtr ) : LONGINT ;
PROCEDURE rewind( f : FILEPtr ) : LONGINT ;

PROCEDURE fgetc( f : FILEPtr ) : LONGINT ;
PROCEDURE fgets( str : STRING ; atmost : LONGINT ; file : FILEPtr ) : STRING ;

PROCEDURE fputc( ch  : LONGINT ; f : FILEPtr ) : LONGINT ;
PROCEDURE fputs( str : STRING  ; f : FILEPtr ) : LONGINT ;

PROCEDURE getc( fi : FILEPtr ) : LONGINT ;
PROCEDURE putc( c : LONGINT ; fi : FILEPtr ) ;

PROCEDURE getchar( ) : LONGINT ;
PROCEDURE putchar( c : LONGINT ) : LONGINT ;

PROCEDURE gets  ( str : STRING ) : STRING ;
PROCEDURE puts  ( str : STRING ) : LONGINT ;
PROCEDURE ungetc( ch  : LONGINT ; f : FILEPtr ) : LONGINT ;

PROCEDURE fread( adr : ADDRESS ;
		 obj_size, num_obj : LONGINT ;
		 f : FILEPtr ) : LONGINT ;

PROCEDURE fwrite( adr : ADDRESS ;
		  obj_size, num_obj : LONGINT ;
		  f : FILEPtr ) : LONGINT ;

PROCEDURE fprintf( f : FILEPtr ; fmt : STRING ; .. ) : LONGINT ;
PROCEDURE fscanf ( f : FILEPtr ; fmt : STRING ; .. ) : LONGINT ;
PROCEDURE printf ( fmt : STRING ; .. ) : LONGINT ;
PROCEDURE scanf  ( fmt : STRING ; .. ) : LONGINT ;
PROCEDURE sprintf( str : STRING ; fmt : STRING ; .. ) : LONGINT ;
PROCEDURE sscanf ( str : STRING ; fmt : STRING ; .. ) : LONGINT ;

(* Standard, but not ANSI *)

PROCEDURE fdopen( int : LONGINT ; str : STRING ) : FILEPtr ;
PROCEDURE chdir ( str : STRING ) : LONGINT ;
PROCEDURE getcwd( str : STRING ; int : LONGINT ) : STRING ;
PROCEDURE unlink( str : STRING ) : LONGINT ;

(* Amiga specific *)
TYPE
  FileHandlePtr = BADDRESS ; (* Really Dos.FileHandlePtr *)

PROCEDURE fhprintf( fh : FileHandlePtr ; fmt : STRING ; ..) : LONGINT ;

END StdIO.

